package com.zhudi.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhudi.model.entity.User;
import com.zhudi.model.request.PageRequest;
import com.zhudi.model.request.UserLoginRequest;
import com.zhudi.model.request.UserRegisterRequest;
import com.zhudi.model.vo.UserVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
* @author 朱朱朱朱蒂
* @description 针对表【user(用户信息表)】的数据库操作Service
* @createDate 2024-02-07 23:51:09
*/
public interface UserService extends IService<User> {


    /**
     * 用户登录
     * @param userLoginRequest 包含登录用户名和密码的请求类
     * @param request 登录成功用于保存到session中
     * @return 返回登录成功的用户信息
     */
    UserVO login(UserLoginRequest userLoginRequest, HttpServletRequest request);

    /**
     * 注册方法
     * @param userRegisterRequest 注册信息
     * @param request 浏览器请求
     * @return 返回脱敏后的数据
     */
    Integer register(UserRegisterRequest userRegisterRequest, HttpServletRequest request);

    /**
     * 注销操作
     * @param request 浏览器请求
     * @return 用户ID
     */
    Integer logout(HttpServletRequest request);

    /**
     * 获取所有用户信息
     * @return 所有用户信息
     */
    List<UserVO> getAllUser();

    /**
     * 获取当前用户信息
     * @param userId 用户ID
     * @return 用户信息
     */
    User getUser(Long userId);

    User getLoginUser(HttpServletRequest request);


    /**
     * 更新字段信息
     * @param updateUser 要更新字段的封装类
     * @param loginUser 要更新的用户
     * @return 成功true
     */
    boolean update(User updateUser, User loginUser);


    /**
     * 判断一个用户是否是管理员
     * @return 是为true
     */
    boolean  isAdmin(Long id);


    /**
     * 获取用户的ak和sk
     * @param loginUser 当前登录用户
     * @return 保存了ak和sk的userVo
     */
    UserVO getKeys(User loginUser);

    /**
     * 给用户生成新的ak、sk
     * @param loginUser 当前登录用户
     * @return 包括了新的ak、sk的vo
     */
    UserVO getNewKeys(User loginUser);
}
